package com.lx.pc.utils;

import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class PrintView {
	public PrintView() {
		JFrame jf = new JFrame();
		jf.setSize(595, 842);
		Container c = jf.getContentPane();
		c.add(new Draw());
		jf.addKeyListener(new KeyListener() {
			@Override
			public void keyPressed(KeyEvent e) {
				if (e.getKeyCode() == KeyEvent.VK_P) {
					try {
						PrinterJob job = PrinterJob.getPrinterJob();
						if (!job.printDialog()) {
							return;
						} 
						job.setJobName("打印图形");
						job.print();
					} catch (PrinterException e1) {
						e1.printStackTrace();
					}
				}
			}
			@Override
			public void keyReleased(KeyEvent e) {
			}

			@Override
			public void keyTyped(KeyEvent e) {
			}
		});
		jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		jf.setLocationRelativeTo(null);
		jf.setVisible(true);
	}

	public static void main(String[] args) {
		new PrintView();
	}

	class Draw extends JPanel {
		/**
		 * 
		 */
		private static final long serialVersionUID = 1L;
		public void paint(Graphics g) {
			super.paint(g);
			Font font, font2;
			font = new Font("宋体", Font.BOLD, 20);
			Graphics2D g2 = (Graphics2D) g;
			g2.setFont(font);
			g2.drawString("开票详情", 250, 100);// 标题
			
			font2 = new Font("宋体", Font.PLAIN, 10);
			g2.setFont(font2);
			
			List<String> ls = new ArrayList<String>();
			ls.add("开票信息");
			ls.add("公司名称");
			ls.add("税前金额");
			ls.add("税费");
			ls.add("合计");
			ls.add("开票类型");
			ls.add("开票项目");
			ls.add("纳税人识别号");
			ls.add("营业地址");
			ls.add("公司电话");
			ls.add("开户行");
			ls.add("银行账户");
			ls.add("备注");
			
			ls.add("收件信息");
			ls.add("收件人");
			ls.add("手机号");
			ls.add("收件地址");
			
			ls.add("申请信息");
			ls.add("申请人");
			ls.add("申请时间");
			Map<String,Object> map = new HashMap<String,Object>();
			map.put("开票信息", "");
			map.put("公司名称", "打零工");
			map.put("税前金额", "100");
			map.put("税费", "50");
			map.put("合计", "150");
			map.put("开票类型", "33");
			map.put("开票项目", "3333");
			map.put("纳税人识别号", "33333333333");
			map.put("营业地址", "333333333333333333333333");
			map.put("公司电话", "3333333");
			map.put("开户行", "333333333333");
			map.put("银行账户", "3333333333");
			map.put("备注", "333333333333");

			map.put("收件信息", "");
			map.put("收件人", "333333333");
			map.put("手机号", "333333333");
			map.put("收件地址", "33333333");

			map.put("申请信息", "");
			map.put("申请人", "33333333333");
			map.put("申请时间", "3333333333333");
			
			int n[] = new int[] { 0, 2, 3};
			int s = 0;
			int x = 40;
			int y = 115;
			int row = 1;
			g2.drawLine(x, y, 539, y);// 横线
			for (int i = 0; i < ls.size(); i++) { // 画横线
				y = 115 + row * 25;
				if("".equals(map.get(ls.get(i)))){
					g2.setBackground(Color.GRAY);//设置背景色
					g2.clearRect(x, y-25, 500, 25);//通过使用当前绘图表面的背景色进行填充来清除指定的矩形。
				}
				g2.drawString(ls.get(i).toString().trim(), x + 3, y - 4); // 写入当行数据
				g2.drawString(String.valueOf(map.get(ls.get(i))), x + n[1] * 100 + 3, y - 4); // 写入当行数据
				g2.drawLine(x, y, 539, y);// 横线
				row++;
			}
			row = 0;
			s = 0;
			x = 40;
			for (int i = 0; i < 3; i++) { // 画竖线
				s = n[i] * 100;
				x = x + s;
				g2.drawLine(x, 115, x, y );// 竖线
				
			}
		}
	}
}